// 导入操作 token 的方法
import { setToken, removeToken, getToken } from '@/utils/auth'
// 导入登录的接口方法
import { loginApi, getInfoApi, getBaseInfoApi } from '@/api/user.js'
// 这个模块用来管理用户相关的信息
const state = {
  // 保存 token
  token: getToken() || '',
  // 用户信息
  userInfo: {}
}
const mutations = {
  // 存储 token 的方法
  setToken(state, payload) {
    // 1.0 vuex 中（内存中）
    state.token = payload
    // 2.0 cookie 中（浏览器中）
    setToken(payload)
  },
  // 删除 token 的方法
  removeToken(state) {
    // 1.0 vuex 中（内存中）
    state.token = ''
    // 2.0 cookie 中（浏览器中）
    removeToken()
  },
  // 保存用户信息
  setUserInfo(state, paylaod) {
    state.userInfo = paylaod
  },
  // 清除用户信息
  removeUserInfo(state) {
    state.userInfo = {}
  }
}
const actions = {
  // 完成登录，保存状态（token）
  async login(ctx, payload) {
    try {
      // 请求登录接口
      const res = await loginApi(payload)
      console.log(res)
      // 得到 token
      // const token = res.data.data
      const token = res.data
      // 保存 token
      ctx.commit('setToken', token)
    } catch (error) {
      // 返回一个错误对象给外界
      return Promise.reject(error)
    }
  },
  // 获取用户信息
  async getUserInfo(ctx, payload) {
    try {
      // 发送请求得到用户信息
      const res = await getInfoApi()
      // 再请求员工基本信息（包含了用户头像）
      const baseRes = await getBaseInfoApi(res.data.userId)
      // 将两个用户信息合并起来
      const result = { ...res.data, ...baseRes.data }
      // 得到用户信息
      ctx.commit('setUserInfo', result)
      // 这里这段代码在现在没用，等到我们过完年回来才会有用（埋下了一个伏笔）
      // return res.data
      return result
    } catch (err) {
      return Promise.reject(err)
    }
  }
}

export default {
  namespaced: true, // 开启命名空间
  state, // 管理状态
  mutations, // 修改状态
  actions // 处理异步操作
}
